1. Field of the Invention
The present invention relates to the development of modular software. Specifically, this invention is related to the development of software that is flexible and platform independent so that it can be reused without manually reworking. This invention is embodied in a system, method and a computer program product for a software model that uses components; and in a system, method and a computer program product that is used for converting a given software component that is flexible, reusable and platform-independent into a target specific executable form.
2. Background
Software that is created for a specific application often needs to be implemented over a wide range of hardware platforms. These hardware platforms often differ in their performance, electrical rating and several other parameters. It is infeasible to develop separate software for each hardware platform. Therefore, platform independence plays a critical role in enhanced usability of software. Control software that caters to variable speed drives is a good example of a software application that needs to be platform independent.
A possible solution to this problem would be to develop hardware that can operate at all ranges of operation. However, it is economically unfeasible to develop such a hardware platform that operates in all required performance ranges and electrical ratings. A complete hardware platform unit (including signaling electronics, mechanical parts, power electronics) at a lower performance class is cheaper to produce than only the signal electronics for a unit with a higher performance class. Additionally, different processors that function at different performance levels and electrical ratings are required. Further, either fixed point or floating point arithmetic needs to be used depending on the performance requirements. Combining operations at different performance ratings, therefore, would be excessively expensive.
In spite of having a range of hardware platforms, a vast majority of software functions need to be implemented across the entire range of hardware platforms. For example, variable speed drive signal processing software has to be implemented across the entire range of drive hardware platforms. In order for functions to be applicable across a range of hardware platforms, an important precondition is that these functions have to be similar. Therefore, software that implements these functions also has to be similar.
It should be noted that as better hardware platforms are developed, the functions implemented by a given piece of software need to have a larger scope. Such a large scope is required to service the resulting improved functionality. In our example related to high-speed drives, the functional scope of the software rises continuously with the performance requirements. Also, functions that could hitherto be employed only in high-performance equipment are now increasingly migrating to lower performance levels. For example, previously, multitasking could only be performed by a workstation. Presently, personal computers offer the capability to perform multitasking. Further, short product life of two to three years is normal in software development. Therefore, software has to be designed to be flexible enough to effectively support upgrades, technology enhancement and innovations. Clearly, development time and costs can be saved by re-use of the software.
Presently, software that implements a specific function across a range of hardware platforms is produced separately for each target system using a high-level language (generally C) and assembler. The target-system-specific characteristics are included in the software right from the beginning of software development. Porting such software to platforms other than that which the software was originally designed for becomes very difficult. Further, the additional changes made to the software for porting it to other platforms requires additional testing. This additional testing adds to the overall cost.
However, conventional systems that use components (e.g. SIMADYN D, SIMATIC) are not platform-independent. In such systems, porting to target hardware platforms other than that for which the software was created is still complex.
It should be noted virtual machines are normally not used in real-time systems, such as variable speed drives. This is because virtual machines require substantially more computing power and processing time.
It is an object of the present invention to overcome the above-mentioned problems in porting software across multiple hardware platforms and to produce a clearly structured, easily maintainable software, whose capability is not affected even at high levels of complexity.
It is a specific object of the present invention to provide a system, method and a computer program product for developing software that is flexible and reusable across several hardware platforms. It is another object of the present invention to provide a system, method and computer program product for converting modular and system independent software into a target platform specific software in the form of an executable code.
In order to achieve the above-mentioned objects, there is provided a software system comprising one or more software components, an operating system connected to said one or more software components, said operating system controlling said one or more software components, each of said one or more software components having a limited functional scope and processing input data to form new output data, wherein each of said one or more software components is independent of other software components and produced in a reusable platform independent fashion, and wherein application software is created by graphically linking a subset of said one or more software components.
Preferably said one or more software components each perform a specific function, wherein said one or more software components further comprise parameters, a plurality of variables, input data and output data, wherein said variables can only be changed, if a component associated with a variable to be changed is called, wherein the parameters and the variables are stored in an area assigned to each said one or more software components and are completely encapsulated within each said one or more software components, said input and output data being used for bringing new data to and from the components.
Still preferably said component is initialized before being called for the first time.
Preferably each of said one or more software components is created by instantiating one or more platform independent software component types, each of said one or more software component types further comprises an interface file and a body file, wherein said interface file contains a definition of all said input data and output data and a definition of all local variables and information required for graphics configuration of each of said one or more software components, wherein said body is broken into individual segments, said individual segments reserving memory space for a sub-function associated with a corresponding component.
Preferably said software components can be connected together in a graphical way using a graphical interface program.
Another aspect of the present invention is a system for generating a target platform-specific software component from a platform-independent software component type, said component type comprising an interface and a body, said system comprising a component generator; an initialization file; a control file; and a script file, wherein said component generator further comprises a database; a controller; an analyser, and a synthesizer. Said analyser prepares necessary data and stores said necessary data in the database using data in the interface. Said synthesizer uses the stored data in the database and creates executable and compilable program code, wherein data in said control file is used to control operations of the analyser and synthesizer.
Preferably the system further comprises a target platform-specific compiler for compiling said source component into object components being input to an object library and a target platform specific linker for creating an executable code from the object components and the interface.
Yet another aspect of the present invention is a method of developing software comprising separating a required task to be performed by said software into mutually independent functionalities, designating separate software components to each of said functionalities and assigning parameters, variables, input data, output data for calculating functions associated with each of said separate software components.
Preferably the method of developing software comprises the additional step of storing the parameters and the variables associated with each of said separate software components to separate memory areas assigned to each of said separate software components.
Preferably the method of developing software comprises the additional step of creating an initialization function each for initializing each of said separate software components.
Preferably the method of developing software comprises the additional step of developing a process map each for each of said separate software components that stores all signals associated with each said separate software components.
Preferably the method of developing software comprises the additional step of developing event routines for each of said separate software components, each of said event routines being triggered when an associated event occurs.
Preferably, said components are reusable and platform independent.
Preferably each of said separate software components further comprises an interface file and a body file, wherein said interface file contains a definition of all said input data and output data and a definition of all local variables and information required for graphics configuration of said each component, wherein said body is broken into individual segments, said individual segments reserving memory space for a sub-function associated with each of said separate software components.
Preferably, each of said separate software components can be connected to other components using a graphical interface program.
Yet another aspect of the present invention is a method of generating a target platform-specific software component from platform-independent software component type, said method comprising creating an interface mask necessary to display the software component on a screen in a graphics engineering system; creating a target platform-specific source file and an appropriate header-file for performing a functionality associated with the software component; compiling the header file and a source file using a target-system specific compiler to create an object library; and linking the object library using specific information of the graphics engineering system to create an executable code.
Still another aspect of the present invention is a computer program product for developing software including a computer readable medium comprising a computer-readable separating code for separating a required task to be performed by said software into functions and designating separate software components to each of said functions, a computer readable assignor code for assigning parameters, variables, input data, output data for calculating functions associated with each individual component and storing the parameters and the variables associated with each component to separate memory areas assigned to each said component, a computer-readable initialization code for creating an initialization function each for initializing each said component, a computer-readable process map code for developing a process map each for each said component that stores all signals associated with each said component, and a computer-readable configuration code for configuring a process and associated calculations.
Still another aspect of the present invention is a computer program product for generating a target platform-specific software from platform-independent software components, including a computer readable medium comprising a computer-readable mask code for creating an interface mask necessary to display the software component on a screen specific to the target platform, a computer-readable source component code for creating a target platform-specific source component for performing a functionality associated with the software component, a computer-readable compiler code for compiling the interface mask and the source component using a target-system specific compiler to create an object library and a computer-readable linking code for linking the object library and the mask library to create an executable code.